home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / C / LIB / OSLIB / CHANGELO00 next >
Text File  |  1996-02-26  |  19KB  |  552 lines

  1. 20/09/95
  2. OSLib 5.1 Post-Release Tweaking
  3. -------------------------------
  4. Examples archive: c.x and h.x amended 20/09/95
  5.  
  6. OSLib release 5.1
  7. ----- ------- ---
  8.  * Moved Service_RedrawingWindow from Window to Toolbox, and got the
  9. number right.
  10.  
  11.  * Draw_Tag is a byte, not a word.
  12.  
  13.  * CD_ControlBlock is 5 words, not 4.
  14.  
  15.  * Numberrange_set_bounds(), radiobutton_get_state() arguments corrected.
  16.  
  17.  * Help text on abstract types now transmitted into the C header.
  18.  
  19.  * |NULL| is now |0| in C (was |((void *) 0)|).
  20.  
  21.  * Some symbols defined in "drawfile.h" had the prefix |draw_|; changed
  22. to |drawfile_|.
  23.  
  24.  * Better definition of calibration table in ColourTrans.
  25.  
  26.  * Added |pdriver_draw_flags|.
  27.  
  28.  * Added class_PRINT_DBOX, adjuster_DECREMENT changed to
  29. adjuster_INCREMENT, popup_CLASS and stringset_CLASS corrected,
  30. numberrange gadget flags corrected.
  31.  
  32.  * Make sure the largest components of unions are at the end, to keep
  33. the ObjAsm header files correct. Not done for NetFS file server protocol
  34. blocks, so these should be reserved by giving the actual size needed in
  35. each case.
  36.  
  37.  * Systematic incorporation of PRM vol 5a material.
  38.  
  39.  * Hourglass_Smash has no argument.
  40.  
  41.  * Changed various |char *| components in toolbox objects to
  42. |toolbox_msg_reference| (which is a typedef for |char *| anyway), etc,
  43. in an attempt to represent their relocation behaviour. Deleted
  44. Gadget_Header, renamed |body| field as |gadget| and all gadget structure
  45. ending in 'object' to 'gadget.' Used Window_Window and Window_IconData
  46. instead of Wimp_Window and Wimp_IconData, since they are slightly
  47. different. Toolbox_Class now a short.
  48.  
  49.  * Use StrongHelp version 2.
  50.  
  51.  * Added obsolete OS_Byte and OS_Word calls (why?).
  52.  
  53. OSLib release 5.0
  54. ----- ------- ---
  55.  * Added PaletteV_BlankScreen, PaletteV_DimLCD, PaletteV_InvertLCD.
  56.  
  57. OSLib release 4.8
  58. ----- ------- ---
  59.  * Added the capability for more help text. Help text will be slowly
  60. added as it becomes apparent how best to do it.
  61.  
  62.  * Added Toolbox SWI's. Now there are (well) over 77 headers, split the
  63. lot into 4 parts and added SetVars to the distribution. After running
  64. it, use -IOS: on the cc command to pick up the headers, and link with
  65. OSLib:o.OSLib.
  66.  
  67.  * Added CD, CDFS, thanks to Simon Middleton of Uniqueway.
  68.  
  69.  * Fixed many Toolbox files based on an extensive going-over by Simon
  70. Middleton.
  71.  
  72.  * Added SCSI, SCSIFS.
  73.  
  74.  * Added WindowSupportExternal, fixed some faults in Window, Toolbox
  75. (thanks to that Simon again).
  76.  
  77.  * Corrected OSArgs_SetAllocation.
  78.  
  79.  * Added some help text.
  80.  
  81. OSLib release 4.7
  82. ----- ------- ---
  83.  * Added Freeway and ShareFS.
  84.  
  85.  * Added *lots* of new type names, most of which are defined as |int| or
  86. |bits|, and added 'Values:' section to StrongHelp on types. (See, e g,
  87. |wimp_colour|.) In most cases, this allows you in a single click to see
  88. all the values that are allowed in a given argument position. For
  89. example, given the prototype for os_read_mode_variable(), you can find out
  90. the names of the legal mode variables. Moved some filing system contants
  91. into FileSwitch to support this.
  92.  
  93.  * Turned more output arguments into return values, for efficiency
  94. reasons (mostly in OS, ColourTrans).
  95.  
  96.  * Added socket SWI's.
  97.  
  98.  * Added 16-bit Sound SWI's.
  99.  
  100.  * Added osbyte(), osbyte1(), osbyte2() for the useful special cases of
  101. OS_Bytes that take 3 arguments and return no result, or a result in R1
  102. or R2.
  103.  
  104.  * Added ColourTrans_ReturnWideEntries, OSSpriteOp_GivenWideEntries.
  105.  
  106.  * Corrected dosfs_layout_structure(), added dosfs_layout_structure_-
  107. given_size().
  108.  
  109.  * Name change for 2 OSSpriteOp flags words, which were confusing (now
  110. osspriteop_DESTINATION_COORDS, osspriteop_SOURCE_RECTANGLE).
  111.  
  112.  * Removed more spaces around # in C headers.
  113.  
  114.  * Buffer_InternalId returned by Buffer_InternalInfo.
  115.  
  116.  * ADFSDiscOp_FormatTrack takes a FileCore_TrackFormat, not a
  117. FileCore_Format.
  118.  
  119.  * Fixed bug in NetFS_SetObject types (operation type was not present).
  120.  
  121. OSLib release 4.6
  122. ----- ------- ---
  123.  
  124.  * Add |const| qualifiers in places where they are valid, i e, where the
  125. function takes a pointer to an object which it does not use to modify
  126. the object.
  127.  
  128.  * Made |filecore_disc_record| 4 bytes longer, since filecore_describe_-
  129. disc() fills in 64 bytes.
  130.  
  131.  * Changed int to char [4] in NetFS to avoid alignment problems.
  132.  
  133.  * Added OS_ChangedBoxState constants.
  134.  
  135.  * Moved most of the macros in "types.h" into a new "macros.h."
  136.  
  137.  * Added mode flags bits.
  138.  
  139.  * Corrected name of ColourTrans_ReadPalette's output argument: |spare|
  140. not |used|.
  141.  
  142.  * At this point, the RISC O S interface provided by OSLib consists of
  143.  
  144.        2122 symbolic constants
  145.         461 error numbers
  146.          16 event functions
  147.          78 message numbers
  148.         103 service call functions
  149.         983 swi functions (each in x and non-x form)
  150.         355 types
  151.          25 upcall functions
  152.          36 vector functions
  153.  
  154. in 68 header files.
  155.  
  156.  * Changed workspace from |byte *| to |void *| (for consistency) in
  157. ColourPicker and CompressJPEG. (|Buffer| should never be |const|;
  158. |workspace| should always be |void *|; |handle| should always be |int|.)
  159.  
  160.  * PaletteV_{Read,Write}Entries argument changed to |os_colour_number *|
  161. from |int *|.
  162.  
  163. OSLib release 4.5
  164. ----- ------- ---
  165.  
  166.  * Added SWI's MessageTrans_Dictionary, Joystick_ReadHalfWord,
  167. Joystick_CalibrateTopLeft, Joystick_CalibrateBottomRight, PDriver_JPEGSWI.
  168.  
  169.  * Added modules JPEG, CompressJPEG, Portable.
  170.  
  171.  * Corrected WimpTextOp flags.
  172.  
  173.  * Added type OSFile_InfoWords, useful for converting load and exec
  174. addresses into date and time.
  175.  
  176.  * Corrected NetFS_DoFSOpToGivenFS.
  177.  
  178.  * Added Wimp_GivenWindowAndIcon for Wimp_GetMenuState.
  179.  
  180.  * Added ColourPicker_DialogueIgnoreKeyPressed and
  181. ColourPicker_UpdateIgnoreKeyPressed.
  182.  
  183. OSLib release 4.4 (RISC O S 3.6 compatible)
  184. ----- ------- --- ----- - - --- -----------
  185.  
  186.  * Added |pdriver_FEATURE_DRAW_PAGE_FLAGS| and changed type of
  187. |pdriver_draw_page| first argument to |bits| for JPEG support.
  188.  
  189.  * Added osspriteop_verify_area().
  190.  
  191.  * (*Experimental*) Use inline SWI's where possible: 252 out of 2429 SWI
  192. veneers happen to be A P C S-conformant, and may be replaced by single
  193. SWI instructions in the caller. Only supported by Norcroft C release 5,
  194. but enabled by default: IF YOU ARE NOT USING NORCROFT C RELEASE 5 OR
  195. LATER, you must disable the feature by using the -D__swi option on the
  196. compiler command line (e g, 
  197.  
  198.       cc -D__swi c.progfile
  199.  
  200. with a hyphen, a capital 'D', 2 underscores, and 'swi' in lower case).
  201. You must also do this when using C++ via CFront (which doesn't
  202. understand it either). The reason this feature is experimental is that
  203. the relevant flavour of A P C S requires that function calls should
  204. preserve flags, which is not guaranteed (an inlinable SWI will always be
  205. an x-clear SWI, and will therefore definitely clear V). If this is a
  206. problem in practice, the feature will be reviewed.
  207.  
  208.  * Added new serial baud rates for RO 3.5 to "osserialop.h."
  209.  
  210.  * Changed copyright notice and deleted OS-specific references (e g, to
  211. P R M) to make DefMod more applicable to 3rd party modules.
  212.  
  213.  * Corrected output argument of OS_GSTrans.
  214.  
  215.  * upcall_sleep() returns |claimed| as its result, not in an output
  216. argument.
  217.  
  218.  * Change nested-inclusion method in assembler headers to allow faster
  219. assembly.
  220.  
  221.  * Added more wimp version symbols. Recommended use is
  222.  
  223.       if ((e = xwimpreadsysinfo_version (&version)) != NULL)
  224.       {  if (e->errnum == error_WIMP_BAD_SYS_INFO)
  225.             version = wimp_VERSION_RO2;
  226.          else
  227.             os_generate_error (e);
  228.       }
  229.  
  230.       if (version >= wimp_VERSION_RO35)
  231.          version = wimp_VERSION_RO35;
  232.                /*or any larger version you "know" about*/
  233.       else if (version >= wimp_VERSION_RO3)
  234.          version = wimp_VERSION_RO3;
  235.       else if (version >= wimp_VERSION_RO30)
  236.          version = wimp_VERSION_RO30;
  237.  
  238.       wimp_initialise (version, programme, messages, NULL, &task);
  239.  
  240. or the equivalent. This is the result of past bugs: versions of the Wimp
  241. after 350 will accept all versions numbers quite happily.
  242.  
  243.  * Added type |os_error_handler_buffer|.
  244.  
  245. OSLib release 4.3
  246. ----- ------- ---
  247.  
  248.  * Added dependency of "dragasprite.h" on "osspriteop.h."
  249.  
  250.  * |#Undef|fed each SWI name and SWI reason code before |#define|ing it.
  251.  
  252.  * Removed spurious ')' in comment for OS_SetPalette.
  253.  
  254.  * Changed names of arguments to Wimp_SetIconState.
  255.  
  256.  * SWI Wimp_Extend given the right number (but it's reserved anyway).
  257.  
  258.  * Added os_read_line_given_echo(), os_read_line_suppress_invalid(),
  259. os_read_line_given_echo_suppress_invalid().
  260.  
  261.  * Changed filetypes, load addrs, exec addrs and attrs to |bits| from |int|
  262. (to avoid undefined behaviour when shifting bits in and out of load and
  263. exec addrs). Affects "filecore.h," "filer.h," "fileraction.h,"
  264. "netfs.h," "osfile.h," "osfscontrol.h," "osgbpb.h," "osmodule.h,"
  265. "pdriver.h," "resourcefs.h," "squash.h," "wimp.h."
  266.  
  267.  * Corrected osfile_TYPE and osfile_TYPE_SHIFT.
  268.  
  269.  * Changed ColourPicker button types to |bits| from |int|.
  270.  
  271.  * Added OSFile attribute values.
  272.  
  273.  * Do not truncate file names at 10 characters in nested includes (as
  274. recommended in my own documentation!). Affects "pdriver.h" only.
  275.  
  276.  * Avoid C++ reserved words (asm, template in "os.h," delete in "netfs.h").
  277.  
  278.  * Remove accidentally duplicated parameter names ("dosfs.h,"
  279. "filecore.h," "font.h," "osspriteop.h," "pdriver.h," "ramfs.h,"
  280. "sharedclibrary.h") to avoid GCC errors.
  281.  
  282.  * Added flags values for osspriteop_set_pointer_shape().
  283.  
  284.  * Output argument of wimpreadsysinfo_tool_sprites() corrected (was
  285. |osspriteop_area *|, should be |osspriteop_area **|).
  286.  
  287.  * Various changes to ReadMe, including description of "abstract types."
  288.  
  289.  * Changed definition of |os_date_and_time| from 
  290.  
  291.       typdef struct {byte b [5];} os_date_and_time;
  292.  
  293. to 
  294.  
  295.       typedef byte os_date_and_time [5];
  296.  
  297. and the same for |netfs_date_and_time|. This may break code, but it is
  298. necessary to ensure that the alignment of structures that use it (e g,
  299. |osgbpb_system_info|) are correct in Norcroft C (which aligns
  300. structures, but not arrays, to word boundaries).
  301.  
  302.  * Added chip-type symbols to "osreadsysinfo.h."
  303.  
  304.  * Fixed minor typos in "devicefs.h," "netfs.h," "osfscontrol.h."
  305.  
  306.  * Added CMOS byte numbers for current year and alarm flags ("osbyte.h")
  307. and also recoded the macros in there to make it totally complete and
  308. consistent for all CMOS locations.
  309.  
  310.  * Corrected SWI numbers for FSLock, added error numbers.
  311.  
  312. OSLib release 4.2
  313. ----- ------- ---
  314.  
  315.  * Fixed bug in ADFS_DiscOp, FileCore_DiscOp, RamFS_DiscOp: first argument
  316. was being passed in R0, not R1.
  317.  
  318.  * Provided 3 functions for Territory_ReadSymbols, so you can call the right
  319. one for the type of result expected.
  320.  
  321.  * Changed the tag used for "abstract" typedefs so that it is different from
  322. the typedef name, for better interworking with GCC and C++ systems. Affects
  323. "buffer.h," "colourpicker.h," "devicefs.h," "dma.h," "econet.h," "os.h,"
  324. "osfscontrol.h," "osspriteop.h," "wimp.h."
  325.  
  326.  * Added wimp_CLOSE_MENU (to be used as an argument to wimp_create_menu())
  327. and wimp_NO_FONTS (to be used as an argument to wimp_load_template()) to
  328. "wimp.h."
  329.  
  330.  * Fixed bug in Filer_MessageOpenDirAt: display field was bits, not byte.
  331.  
  332. OSLib release 4.1
  333. ----- ------- ---
  334.  
  335.  * Wimpreadsysinfo_wimp_mode() returns |os_mode| rather than |int|.
  336.  
  337.  * Fix bug: some byte-wide entities were being written as whole words. This
  338. affects: xcolourtrans_return_gcol(), xcolourtrans_set_gcol(), xcolourtrans_-
  339. return_gcol_for_mode(), xcolourtrans_return_opp_gcol(), xcolourtrans_set_-
  340. opp_gcol(), xcolourtrans_return_opp_gcol_for_mode(), xcolourtrans_colour_-
  341. number_to_gcol(), xcolourtrans_set_text_colour(), xcolourtrans_set_opp_-
  342. text_colour(), xfont_find_font(), xfont_current_font(), font_current_-
  343. font(), xfont_future_font(), font_future_font(), xfont_current_rgb(), xfont_-
  344. future_rgb(), xos_read_point(), os_read_point(), xos_change_redirection(),
  345. os_change_redirection(), xosfind_openin(), xosfind_openout(), xosfind_-
  346. openup(), xosspriteop_read_pixel_colour(), osspriteop_read_pixel_colour(),
  347. xpdriver_select_job(), xpdriver_current_job(), xpdriver_select_-
  348. illustration(), xwimpreadsysinfo_font(), wimpreadsysinfo_font(),
  349. xwimpspriteop_read_pixel_colour(), wimpspriteop_read_pixel_colour().
  350.  
  351.  * Add note to ReadMe file about using NULL pointers as output arguments.
  352.  
  353.  * Duplicate NOP macro deleted from Hdr.Types.
  354.  
  355.  * Added OS_VartypeLiteralString, os_VARTYPE_LITERAL_STRING to OS headers.
  356.  
  357.  * Corrected Wimp error numbers (most were 1 off), added Error_WimpBadSlot,
  358. Error_WimpBadConfFont, Error_WimpNoSprites, Error_WimpBadPalFile2,
  359. Error_WimpBadSprites from RO 3.5, and 2 now-obsolete numbers (too many
  360. windows, division by 0).
  361.  
  362. OSLib release 4
  363. ----- ------- -
  364.  
  365.  * Second public release
  366.  
  367.  * Changed 'allpication' to 'application' in os.h (!).
  368.  
  369.  * Os_change_environment() now returns the old handler.
  370.  
  371.  * Error_SQUASH_BADPARAMETERS gains an underscore.
  372.  
  373.  * In osmodule.h, "context" arguments given more meaningful names
  374. (|module_no|, |instance_no|). Various osmodule_enumerate() calls return
  375. |module_no_out| as the result.
  376.  
  377.  * Added help files for StrongHelp, available on F1 in StrongEd (by
  378. default), and also in Zap C Mode if you bind MJE_HELPCONTEXT to F1 in the
  379. keys file.
  380.  
  381.  * Added OS_PlotVDU, changed argument types of OS_ChangeRedirection.
  382.  
  383.  * Fix bug: size of unions was being specified as 0 in assembler headers.
  384.  
  385.  * Added stuff about "types.h" in ReadMe.
  386.  
  387.  * Restructured: OSLib now contains only ChangeLog, ReadMe, h, Hdr and o.
  388. Separate archives contain Examples (PRM example code in C), CStrong
  389. (StrongHelp for the C interface) and CHelp (SrcEdit help for the C
  390. interface). A future release will contain AsmStrong and AsmHelp (for the
  391. assembler interface).
  392.  
  393. OSLib release 3
  394. ----- ------- -
  395.  
  396.  * Provide ReadMe and this file with the release.
  397.  
  398.  * Added descriptive text to each function.
  399.  
  400.  * "Abstract" types supported: used for Wimp_W, Wimp_T, Econet_RxCB,
  401. Econet_TxCB, etc.
  402.  
  403.  * IIC_Control, OS_Byte, OS_ClaimScreenMemory, Wimp_ClaimFreeMemory now
  404. classified as "reason codes."
  405.  
  406.  * Incorporated suggestions from Jonathan Roach for filecore.h.
  407.  
  408.  * Fix bug: bad code generated for Font_CacheAddr, Font_ReadDefn,
  409. Font_ReadScaleFactor, OSFSControl_ReadFileType, PDriver_PageSize,
  410. WimpSpriteOp_ReadPaletteSize and WimpSpriteOp_ReadSpriteSize.
  411.  
  412.  * Use |void| (instead of |byte|) for generic pointers, where appropriate.
  413.  
  414.  * Added more error numbers.
  415.  
  416.  * Renamed International as ServiceInternational.
  417.  
  418.  * Upgrade to RISC OS 3.5.
  419.  
  420.  * Added more message types to filer.h.
  421.  
  422.  * If there is a reasonable |context_out| argument, return it from the non-X
  423. form.
  424.  
  425.  * Moved "main" SWI's to their own headers (OS_Byte to osbyte.h, etc), InsV,
  426. RemV, CnpV to Buffer.
  427.  
  428.  * Sorted all OS SWI's into one of these groups: the CLI; communications;
  429. conversions; the environment; errors; input; interrupts; memory management;
  430. output; time and date; VDU drivers; vectors; and the rest of the kernel.
  431. Maybe os.h, which is somewhat monolithic, should be split up along these
  432. lines?
  433.  
  434.  * Added RemV, CnpV, but not properly yet.
  435.  
  436. OSLib release 2
  437. ----- ------- -
  438.  
  439.  * Now complete. All calls up to RISC OS 3.10 are included. (Medusa
  440. extensions will have to wait until the next release.)
  441.  
  442.  * In the header files, registers which are assigned fixed values in a
  443. function veneer (e g, reason codes) are listed in an 'Other notes'
  444. paragraph.
  445.  
  446.  * The section header (e g, for 'Constant definitions,' etc) is absent if the
  447. section is absent. The section headers are more eye-catching. (Suggested by
  448. James Bye.)
  449.  
  450.  * More SWI's return results in their non-X form.
  451.  
  452.  * Result registers are no longer in the argument list. In the previous
  453. OSLib, the prototype for |osmodule_alloc()| (which allocates memory from the
  454. R M A) was
  455.  
  456.       void osmodule_alloc (int size, byte **ptr);
  457.  
  458. now it is
  459.  
  460.       byte *osmodule_alloc (int size);
  461.  
  462. Also: OSFile functions return the object type; functions that create an
  463. object or open a file return the handle; SWI's that do a read operation
  464. return the flags, so you can write
  465.  
  466.       while ((os_bget (f, &c) & _C) == NONE)
  467.       {  ... code to do something with character |c| ...;
  468.       }
  469.       ... now at end of file ...;
  470.  
  471. Econet SWI's return the control block created, or the status of the operation
  472. performed; WIMP and PDriver SWI's that are called to loop through rectangles
  473. return the continuation status, so you can write a redraw loop as
  474.  
  475.       for (more = wimp_redraw_window (&r); more;
  476.             more = wimp_get_rectangle (&r))
  477.       {  ... redraw code here ...;
  478.       }
  479.  
  480.  * More consistent terminology: SWI's that fill buffers have two arguments,
  481. usually called |buffer| and |size|, and may return one of: a pointer to the
  482. next free byte (always called |end|); a number of bytes written (called
  483. |used|); or a count of buffer bytes not used (called |spare|). More
  484. consistency could only be derived by changing the OS, or doing some bizarre
  485. things in the veneer.
  486.  
  487.  * More of the module interface described: vectors, upcalls and events
  488. added, with prefix |os_...v|, |upcall_| and |event_| respectively. Error
  489. prefix changed to |error_|. Message prefix still |message_|, service call
  490. prefix |service_|. All other symbols defined in a module begin with the
  491. module prefix. Service calls and all the above now at the end. (These are
  492. only provided from the implementor's side, as it were: functions to generate
  493. the event, call the vector, make the service call, rather than to act on the
  494. event, claim the vector, or catch the service call.)
  495.  
  496.  * In the header files, C syntax is used for hexadecimal in comments.
  497.  
  498.  * In the header files, brackets removed from pointer declarations.
  499. (Suggested by James Bye.)
  500.  
  501.  * Spurious blank lines removed from header files.
  502.  
  503.  * To get -1 into a register Rx, used to generate the stupid MOV Rx, #&FF:
  504. ORR Rx, Rx, #&FF00: ORR Rx, Rx, #&FF0000: ORR Rx, Rx, #&FF00000. Now
  505. generates MVN Rx, #0 instead, and similarly for similar constants.
  506.  
  507.  * Assumes that a non-X SWI will never be called in SVC mode. This means that
  508. LR is preserved over the SWI instruction and reduces quite a lot of veneers
  509. to 2 instructions.
  510.  
  511.  * Uses that fact that registers not corrupted or returned by the SWI are
  512. preserved, to avoid stacking output addresses where possible. This also
  513. reduces the lengths and memory accesses of a lot of veneers. (Suggested by
  514. James Bye.)
  515.  
  516.  * OSFind changed: instead of (e g) 
  517.  
  518.       xosfind_openout_path (flags, file_name, path, file);
  519.  
  520. use
  521.  
  522.       xosfind_openout (osfind_PATH | flags, file_name, path, file);
  523.  
  524. In other words, the choice between {default path, no path, given path, path
  525. variable} is moved from the function name to the flags argument. (Suggested
  526. by Ian Johnson) Sadly, this cannot be done with the OSFile SWI's, because
  527. they are not related in a systematic way.
  528.  
  529.  * One library (o.OSLib) instead of lots. (Suggested by Kevin Welton.)
  530.  
  531.  * All code examples from the PRM (except volume 4) included in C versions.
  532.  
  533. OSLib release 1
  534. ----- ------- -
  535.  
  536.  * Name changed from SWILib. DefMod written to provide an automatic
  537. translator and veneer generator from module definition files.
  538.  
  539.  * Macros changed to functions. Original macro SWILib now only used to make
  540. DefMod (without this, you would have a circular build process with nowhere to
  541. start).
  542.  
  543.  * Many extra SWI's covered.
  544.  
  545.  * Wimp_Message structures now divided into two sorts: "system messages", in
  546. the union Wimp_Message, and others which may be provided by other modules
  547. (the WIMP also provides some of these).
  548.  
  549.  * X and non-X forms provided.
  550.  
  551.  * OS_F, Font_F instead of OS_Handle, Font_Handle.
  552.